//打卡类型（上班打卡/下班打卡）
var punchType = "下班打卡";

//设置随机延时（分钟），避免所有打卡时间点都一样
var randomSleepMinutes = 1;

//发送打卡结果到此邮箱(换成自己的邮箱)
var emailAddress = "h521822@126.com";

/**
 * 示例:swipe(539, 1918, 539, 1100, 200);
 * 表示从位置(539, 1918)滑动到位置(539, 1100), 持续2秒
 * swipe(swipeStartX, swipeStartY, swipeEndX, swipeEndY, swipeSpeed);
 * 上滑起始和中止的坐标可以根据手机分辨率自己设置
 * swipeSpeed=200适用于上滑解锁美图系统，其他系统的swipeSpeed需要自己测试出来
 * 起始位置坐标可以通过打开手机的调试模式，然后选择开发者选项>开启>指针位置（选择打开）
 */
var swipeStartX = 539;
var swipeStartY = 1918;
var swipeEndX = 539;
var swipeEndY = 1100;
var swipeSpeed = 200;

//脚本执行时保持屏幕常亮,默认15分钟
var keepScreenOnMinutes = 5;

Date.prototype.Format = function (fmt) {
  var o = {
    "M+": this.getMonth() + 1, //月份
    "d+": this.getDate(), //日
    "h+": this.getHours(), //小时
    "m+": this.getMinutes(), //分
    "s+": this.getSeconds(), //秒
    "q+": Math.floor((this.getMonth() + 3) / 3), //季度
    "S": this.getMilliseconds() //毫秒
  };
  if (/(y+)/.test(fmt))
    fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  for (var k in o)
    if (new RegExp("(" + k + ")").test(fmt))
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  return fmt;
};


var 小时 = parseInt(dialogs.rawInput("请输入时间（24小时）", 09));
console.log(小时)
var 分钟 = parseInt(dialogs.rawInput("请输入分钟", 19));
console.log(分钟)

var ihm = 小时 + ':' + 分钟


while (true) {
  if (getLocalDate1() == ihm) {
    startFun()
    break
  }
}


function getLocalDate1 () {
  return (new Date()).Format('h:m')
}

function startFun () {

  //输出指定日志文件
  console.setGlobalLogConfig({
    file: "/sdcard/auto_daka_log.txt",
  });

  //记录当前时间
  var date = new Date();
  console.log(
    "当前日期：" +
    date.getFullYear() +
    "/" +
    (date.getMonth() + 1) +
    "/" +
    date.getDate()
  );
  console.log(punchType + "开始");

  //设置随机延时
  var sleep_time = random(0, randomSleepMinutes * 60 * 1000);
  console.log("延时时间：" + sleep_time / 1000 + "s");
  sleep(sleep_time);

  //进入打卡流程
  punchTheClock();

}




function punchTheClock () {
  //唤醒手机
  device.wakeUp();
  sleep(3 * 1000);

  //判断屏幕是否唤醒成功
  if (!device.isScreenOn()) {
    console.error("屏幕未唤醒，退出脚本");
    exit();
  }

  //上滑解锁
  sleep(3 * 1000);
  swipe(swipeStartX, swipeStartY, swipeEndX, swipeEndY, swipeSpeed);
  sleep(3 * 1000);

  //脚本执行时保持屏幕常亮
  device.keepScreenOn(keepScreenOnMinutes * 60 * 1000);

  //返回桌面
  home();
  sleep(5 * 1000);


  // TODO 需要修改
  //关闭钉钉（这个关闭操作根据自己设备具体情况配置）
  console.log("关闭钉钉");
  openAppSetting(getPackageName("钉钉"));
  sleep(5 * 1000);
  click("强行停止");
  sleep(5 * 1000);
  click("强行停止");
  sleep(5 * 1000);

  //打开钉钉
  console.log("打开钉钉");
  launchApp("钉钉");
  sleep(10 * 1000);

  //判断是否已登录
  if (id("tv_welcome_name").exists()) {
    console.error("钉钉未登录");
    exit();
  }

  //点击忽略更新（如果有）
  if (click("暂不更新")) {
    console.log("点击暂不更新");
  }
  sleep(5 * 1000);

  //点击工作台
  console.log("点击审批");
  clickMessage("审批");
  sleep(10 * 1000);

  //点击考勤进入打卡页面
  console.log("点击考勤打卡");
  clickMessage("考勤打卡");
  sleep(10 * 1000);


  // 截图需要申请权限，只能异步同意权限
  threads.start(function () {
    sleep(1000)
    click(780, 1344)
  })


  //截图请求
  console.log("截图");
  if (!requestScreenCapture()) {
    console.error("请求截图失败");
    exit();
  }
  sleep(2 * 1000);

  var img = captureScreen();
  images.saveImage(img, "./result.png");
  sleep(5 * 1000);

  //发送邮件，唤起选择发送邮件应用的界面
  console.log("发送邮件");
  app.sendEmail({
    email: [emailAddress],
    subject: punchType + "成功",
    text: punchType + "成功",
    // attachment: "./result.png",
  });
  sleep(5 * 1000);


  // TODO需要修改
  //点击应用名称选择邮箱。根据自己情况配置，我用的美图系统自带邮箱
  clickMessage("电子邮件");
  sleep(5 * 1000);

  // 追加附件
  click(760, 90)
  sleep(5 * 1000);

  clickMessage("图库");
  sleep(5 * 1000);

  clickMessage("脚本");
  sleep(5 * 1000);

  // 选择图片
  click(170, 410)
  sleep(5 * 1000);

  click(910, 90)
  sleep(5 * 1000);

  // 发送
  click(987, 144)
  sleep(5 * 1000);


  //点击发送邮件
  //if (className("android.widget.Button").desc("发送").findOnce().click()) {
  // console.log("邮件发送成功");
  //} else {
  //console.error("未找到邮件发送按钮");
  //exit();
  //console.log("通过坐标点击发送");
  //click(987,144)
  // }
  //通过坐标点击发送(我这边调试不通，暂时通过坐标方式去点击发送，实现效果一样)
  click(987, 144)
  sleep(5 * 1000);


  // TODO 需要修改
  //关闭钉钉（这个关闭操作根据自己设备具体情况配置）
  console.log("关闭钉钉");
  openAppSetting(getPackageName("钉钉"));
  sleep(5 * 1000);
  click("强行停止");
  sleep(5 * 1000);
  click("强行停止");
  sleep(5 * 1000);

  //返回主页
  home();
  sleep(1 * 1000);

  //关闭屏幕常亮
  console.log("关闭屏幕常亮");
  device.cancelKeepingAwake();

  console.log("打卡完成");
  exit();
}


//根据控件文字点击，如果点击失败，则说明打卡流程无法正常进行，结束脚本运行
function clickMessage (message) {
  var n = 3;
  var logo = false;
  while (n--) {
    if (click(message)) {
      logo = true;
      break;
    }
    sleep(3 * 1000);
  }
  if (logo == false) {
    console.error("点击" + message + "出错");
    exit();
  }
}


